动态格式
计算组中格式表达式中可以设置度量的显示格式,这里要注意,动态格式表达式目前只适用于值类型的度量,文本类型是不支持的,比如最近很多人在表格中应用了svg,在图表中是正常显示成图表的,但在工具提示中就会显示长长的svg代码,可读性极差,目前只能通过添加图层或者指定工具提示页来解决,是无法修改svg度量的动态格式的,因为它是文本类型。
继续回到动态格式,在以前的文章中曾分享过怎么实现动态格式,比如当值大于亿时显示单位为亿,大于万时显示为万,就像下面这样
VAR Cur =
SELECTEDMEASURE ()
RETURN
SWITCH (
True(),
Cur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿" ),
Cur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万" ),
Cur >= 1E0, "#,0",
"#,0.00%"
)
这段代码在值大于0的时候表现良好,但是当值存在负值时呢?首先想到的是用绝对值,会如我所愿吗?
VAR Cur =
SELECTEDMEASURE ()
var AbsCur = abs( Cur )
RETURN
SWITCH (
True(),
AbsCur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿" ),
AbsCur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万" ),
AbsCur >= 1E0, "#,0",
"#,0.00%"
)
负值的部分出现了两个负号,那就问下gpt4,因为当值是负值时,本身会带一个负号,然后FORMAT函数又加了一个负号,就变成了两个负号。
明白了原因,处理起来就简单了,只需要保留自带的负号,Format格式化的时候全用绝对值就可以了。
VAR Cur =
SELECTEDMEASURE ()
var AbsCur = abs( Cur )
var result =
SWITCH (
True(),
AbsCur >= 1E8, """" & FORMAT ( AbsCur / 1E8, "#,0.00 亿" ),
AbsCur >= 1E4, """" & FORMAT ( AbsCur / 1E4, "#,0.00 万" ),
AbsCur >= 1E0, "#,0",
"#,0"
)
return result
如果想单独设置负值时的格式呢?回到微软官方文档,发现FORMAT的自定义格式部分其实是有三部分呢,只是通常正值和负值的格式一样,所以就没用过后面的部分。。。
所以,也可以改为下面这样
VAR Cur =
SELECTEDMEASURE ()
var AbsCur = ABS( Cur )
RETURN
SWITCH (
True(),
AbsCur >= 1E8, """" & FORMAT ( Cur / 1E8, "#,0.00 亿;#,0.00 亿 " ),
AbsCur >= 1E4, """" & FORMAT ( Cur / 1E4, "#,0.00 万;#,0.00 万" ),
AbsCur >= 1E0, "#,0",
"#,0.00%"
)
这里还要注意的是如果我们不使用FORMAT来格式化度量的话,效果上会有差异的,比如下面这样,就去掉了度量所带的负号,用括号来替代了。两种方法结合就可以更自由地组合度量值的动态格式了。